\section{Funzionalit\`a per l'utente}

\subsection{Registrazione}
Il cliente pu\`o (e deve nel caso voglia fare acquisti tramite il sito) registrarsi tramite il servizio apposito. Vi sono alcuni dati il cui inserimento \`e obbligatori, come nome, cognome, password e mail, la quale verr\`a utilizzata come username. Gli altri dati riguardanti l'indirizzo sono invece facoltativi. Viene fornita un'assistenza base nell'inserimento dei dati, che consiste in un semplice controllo della sintassi del dato inserito. Per esempio una mail deve contenere una @ e un . e devono essere presenti dei caratteri prima e dopo questi elemento; un nome pu\`o contenere solo lettere dell'alfabeto, senza alcun numero o carattere speciale.

\subsection{Autenticazione}
Il cliente, per poter acquistare un libro deve obbligatoriamente autenticarsi, fornendo la mail e la password inserita precedentemente al momento della registrazione.
Se, dopo essersi autenticato, il cliente rimane inattivo per pi\`u di mezz'ora, il sistema esegue il logout forzato del cliente stesso.

\subsection{Ricerca libri}
Il cliente (autenticato e non) pu\`o effettuare una ricerca nell'intero catalogo dei libri in vendita accedendo al servizio di ricerca. Questo servizio permette la ricerca tramite vari campi (utilizzabili simultaneamente): isbn, titolo, autore, categoria, eventuali tag. Una volta effettuata la ricerca viene visualizzato l'elenco dei libri che corrispondono ai criteri stabiliti dal cliente. Quest'ultimo pu\`o ulteriormente manipolare la lista dei libri potendo ordinarla  per uno qualsiasi dei suoi campi: isbn, titolo, autore, categoria, tag e prezzo.

%vetrina dipende da questa sezione

\subsection{Vetrina}
Oltre alla ricerca appena introdotta, l'utente pu\`o anche osservare il contenuto della vetrina, disponibile nella homepage del sito. In questa vetrina vengono visualizzati i dettagli di alcuni dei libri presenti nell'intero catalogo del negozio, scelti dall'amministratore. Anche in questo caso, come descritto nella sezione Ricerca libri, il cliente pu\`o ordinare a piacimento l'elenco dei libri.

\subsection{Acquisto libri}
Una volta scelto un libro il cliente, per acquistarlo, lo deve aggiungere al carrello. Nel caso in cui non sia ancora autenticato, nel momento in cui cerca di fare l'aggiunta, viene rimandato al servizio di autenticazione per effettuare il login. Non sono presenti limiti per quello che riguarda il numero di libri aggiungibili in un carrello, salvo l'effettiva disponibilit\`a del libro nei magazzini. Quando un cliente aggiunge un libro al carrello, lo prenota. Finch\`e saranno presenti nel carrello, gli oggetti selezionati non saranno disponibili ad altri clienti. Se il cliente ritorna sui suoi passi eliminando un oggetto dal carrello, questo ritorna disponibile agli altri clienti. Nel caso in cui venga effettuato il logout del cliente, il carrello viene svuotato completamente.
\subsubsection{Manipolazione carrello}
Di default viene inserita una sola copia del libro nel carrello. Per poterne aggiungere altre, il cliente deve accedere alla sezione del carrello. In questa sezione il cliente pu\`o anche rimuovere un libro dal carrello oppure rimuoverne solo alcune copie.

\subsubsection{Checkout}
Per poter acquistare il libro il cliente deve eseguire il checkout del carrello. Una volta effettuato, il cliente deve inserire i dati riguardanti l'indirizzo di consegna. Di default vengono inseriti in modo automatico gli eventuali dati inseriti dal cliente al momento della registrazione.

\subsubsection{Pagamento ordine}
Una volta confermato l'ordine e i dati di consegna del relativo pacco, il sistema ridirige il cliente alla pagina del sistema di pagamento.
Il sistema di pagamento \`e un servizio esterno al negozio di libri, quindi ne abbiamo simulato il comportamento semplicemente tramite un bottone su cui l'utente clicca per confermare il pagamento.
Il cliente non deve inserire il codice dell'ordine, che viene fornito dal negozio di libri al sistema di pagamento in modo automatico.
Dalla conferma dell'ordine il cliente ha un tempo limitato per poter pagare, altrimenti l'ordine verr\`a annullato.
Per motivi di test, attualmente questo limite di tempo \`e di solamente 30 secondi; ovviamente nella realt\`a il cliente avr\`a maggior tempo per poter effettuare il pagamento.


\subsection{Visualizzazione profilo personale}
Una volta effettuata l'autenticazione, il cliente pu\`o visualizzare i propri dati personali. Questi contengono sia i dati inseriti al momento della registrazione sia lo storico degli ordini effettuati, con i relativi dettagli sul contenuto. Inoltre, per ogni ordine, viene visualizzato lo stato della spedizione e l'identificativo dell'ordine assegnato dal servizio di spedizione. Nel caso il servizio di spedizione (esterno al negozio di libri) fornisca questo servizio, il cliente, tramite questo codice, potrebbe visualizzare maggiori dettagli sulla spedizione del pacco e sull'avanzamento di tale spedizione.

%anche l'amministratore????????